import * as vscode from 'vscode';
import { TodoTreeDataProvider } from './todoTreeDataProvider';

export function activate(context: vscode.ExtensionContext) {
    // 初始化TODO数据存储
    const todoStore = context.globalState;
    
    // 创建并注册TreeDataProvider
    const todoTreeDataProvider = new TodoTreeDataProvider(todoStore);
    vscode.window.registerTreeDataProvider('todoExplorer', todoTreeDataProvider);

    // 注册添加TODO命令
    const addTodoDisposable = vscode.commands.registerCommand('todo-manager.addTodo', async () => {
        const input = await vscode.window.showInputBox({
            prompt: 'Enter new TODO item',
            placeHolder: 'What do you need to do?'
        });

        if (input && input.trim() !== '') {
            const todos = todoStore.get<TodoItem[]>('todos', []);
            const newTodo: TodoItem = {
                id: Date.now().toString(),
                label: input.trim(),
                completed: false
            };
            
            todos.push(newTodo);
            await todoStore.update('todos', todos);
            todoTreeDataProvider.refresh();
        }
    });

    // 注册切换TODO完成状态命令
    const toggleTodoDisposable = vscode.commands.registerCommand('todo-manager.toggleTodo', (todo: TodoItem) => {
        const todos = todoStore.get<TodoItem[]>('todos', []);
        const updatedTodos = todos.map(item => 
            item.id === todo.id ? { ...item, completed: !item.completed } : item
        );
        
        todoStore.update('todos', updatedTodos);
        todoTreeDataProvider.refresh();
    });

    // 注册删除TODO命令
    const deleteTodoDisposable = vscode.commands.registerCommand('todo-manager.deleteTodo', (todo: TodoItem) => {
        const todos = todoStore.get<TodoItem[]>('todos', []);
        const filteredTodos = todos.filter(item => item.id !== todo.id);
        
        todoStore.update('todos', filteredTodos);
        todoTreeDataProvider.refresh();
    });

    // 将命令添加到上下文，确保插件销毁时释放资源
    context.subscriptions.push(
        addTodoDisposable,
        toggleTodoDisposable,
        deleteTodoDisposable
    );
}

// 当插件被禁用时调用
export function deactivate() {}

// TODO项接口定义
export interface TodoItem {
    id: string;
    label: string;
    completed: boolean;
}
    